/**
 * <copyright>
 * </copyright>
 *
 * $Id$
 */
package BoardGame;

import org.eclipse.emf.ecore.EObject;

/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Field</b></em>'.
 * <!-- end-user-doc -->
 *
 * <p>
 * The following features are supported:
 * <ul>
 *   <li>{@link BoardGame.Field#getBoard <em>Board</em>}</li>
 *   <li>{@link BoardGame.Field#getNeighbourNorth <em>Neighbour North</em>}</li>
 *   <li>{@link BoardGame.Field#getNeighbourSouth <em>Neighbour South</em>}</li>
 *   <li>{@link BoardGame.Field#getNeighbourEast <em>Neighbour East</em>}</li>
 *   <li>{@link BoardGame.Field#getNeighbourWest <em>Neighbour West</em>}</li>
 *   <li>{@link BoardGame.Field#getFigure <em>Figure</em>}</li>
 *   <li>{@link BoardGame.Field#getX <em>X</em>}</li>
 *   <li>{@link BoardGame.Field#getY <em>Y</em>}</li>
 * </ul>
 * </p>
 *
 * @see BoardGame.BoardGamePackage#getField()
 * @model
 * @generated
 */
public interface Field extends EObject {
	/**
	 * Returns the value of the '<em><b>Board</b></em>' container reference.
	 * It is bidirectional and its opposite is '{@link BoardGame.Board#getFields <em>Fields</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Board</em>' container reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Board</em>' container reference.
	 * @see #setBoard(Board)
	 * @see BoardGame.BoardGamePackage#getField_Board()
	 * @see BoardGame.Board#getFields
	 * @model opposite="fields" required="true" transient="false"
	 * @generated
	 */
	Board getBoard();

	/**
	 * Sets the value of the '{@link BoardGame.Field#getBoard <em>Board</em>}' container reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Board</em>' container reference.
	 * @see #getBoard()
	 * @generated
	 */
	void setBoard(Board value);

	/**
	 * Returns the value of the '<em><b>Neighbour North</b></em>' reference.
	 * It is bidirectional and its opposite is '{@link BoardGame.Field#getNeighbourSouth <em>Neighbour South</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Neighbour North</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Neighbour North</em>' reference.
	 * @see #setNeighbourNorth(Field)
	 * @see BoardGame.BoardGamePackage#getField_NeighbourNorth()
	 * @see BoardGame.Field#getNeighbourSouth
	 * @model opposite="NeighbourSouth"
	 * @generated
	 */
	Field getNeighbourNorth();

	/**
	 * Sets the value of the '{@link BoardGame.Field#getNeighbourNorth <em>Neighbour North</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Neighbour North</em>' reference.
	 * @see #getNeighbourNorth()
	 * @generated
	 */
	void setNeighbourNorth(Field value);

	/**
	 * Returns the value of the '<em><b>Neighbour South</b></em>' reference.
	 * It is bidirectional and its opposite is '{@link BoardGame.Field#getNeighbourNorth <em>Neighbour North</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Neighbour South</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Neighbour South</em>' reference.
	 * @see #setNeighbourSouth(Field)
	 * @see BoardGame.BoardGamePackage#getField_NeighbourSouth()
	 * @see BoardGame.Field#getNeighbourNorth
	 * @model opposite="NeighbourNorth"
	 * @generated
	 */
	Field getNeighbourSouth();

	/**
	 * Sets the value of the '{@link BoardGame.Field#getNeighbourSouth <em>Neighbour South</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Neighbour South</em>' reference.
	 * @see #getNeighbourSouth()
	 * @generated
	 */
	void setNeighbourSouth(Field value);

	/**
	 * Returns the value of the '<em><b>Neighbour East</b></em>' reference.
	 * It is bidirectional and its opposite is '{@link BoardGame.Field#getNeighbourWest <em>Neighbour West</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Neighbour East</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Neighbour East</em>' reference.
	 * @see #setNeighbourEast(Field)
	 * @see BoardGame.BoardGamePackage#getField_NeighbourEast()
	 * @see BoardGame.Field#getNeighbourWest
	 * @model opposite="NeighbourWest"
	 * @generated
	 */
	Field getNeighbourEast();

	/**
	 * Sets the value of the '{@link BoardGame.Field#getNeighbourEast <em>Neighbour East</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Neighbour East</em>' reference.
	 * @see #getNeighbourEast()
	 * @generated
	 */
	void setNeighbourEast(Field value);

	/**
	 * Returns the value of the '<em><b>Neighbour West</b></em>' reference.
	 * It is bidirectional and its opposite is '{@link BoardGame.Field#getNeighbourEast <em>Neighbour East</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Neighbour West</em>' reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Neighbour West</em>' reference.
	 * @see #setNeighbourWest(Field)
	 * @see BoardGame.BoardGamePackage#getField_NeighbourWest()
	 * @see BoardGame.Field#getNeighbourEast
	 * @model opposite="NeighbourEast"
	 * @generated
	 */
	Field getNeighbourWest();

	/**
	 * Sets the value of the '{@link BoardGame.Field#getNeighbourWest <em>Neighbour West</em>}' reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Neighbour West</em>' reference.
	 * @see #getNeighbourWest()
	 * @generated
	 */
	void setNeighbourWest(Field value);

	/**
	 * Returns the value of the '<em><b>Figure</b></em>' containment reference.
	 * It is bidirectional and its opposite is '{@link BoardGame.Figure#getField <em>Field</em>}'.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Figure</em>' containment reference isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Figure</em>' containment reference.
	 * @see #setFigure(Figure)
	 * @see BoardGame.BoardGamePackage#getField_Figure()
	 * @see BoardGame.Figure#getField
	 * @model opposite="field" containment="true"
	 * @generated
	 */
	Figure getFigure();

	/**
	 * Sets the value of the '{@link BoardGame.Field#getFigure <em>Figure</em>}' containment reference.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Figure</em>' containment reference.
	 * @see #getFigure()
	 * @generated
	 */
	void setFigure(Figure value);

	/**
	 * Returns the value of the '<em><b>X</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>X</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>X</em>' attribute.
	 * @see #setX(int)
	 * @see BoardGame.BoardGamePackage#getField_X()
	 * @model ordered="false"
	 * @generated
	 */
	int getX();

	/**
	 * Sets the value of the '{@link BoardGame.Field#getX <em>X</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>X</em>' attribute.
	 * @see #getX()
	 * @generated
	 */
	void setX(int value);

	/**
	 * Returns the value of the '<em><b>Y</b></em>' attribute.
	 * <!-- begin-user-doc -->
	 * <p>
	 * If the meaning of the '<em>Y</em>' attribute isn't clear,
	 * there really should be more of a description here...
	 * </p>
	 * <!-- end-user-doc -->
	 * @return the value of the '<em>Y</em>' attribute.
	 * @see #setY(int)
	 * @see BoardGame.BoardGamePackage#getField_Y()
	 * @model required="true" ordered="false"
	 * @generated
	 */
	int getY();

	/**
	 * Sets the value of the '{@link BoardGame.Field#getY <em>Y</em>}' attribute.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @param value the new value of the '<em>Y</em>' attribute.
	 * @see #getY()
	 * @generated
	 */
	void setY(int value);

} // Field
